mod annotated_str;
mod annotated_str_iter;
pub use annotated_str::AnnotatedStr;
use annotated_str_iter::{AnnotatedStrIter, AnnotatedStrPart};

use crate::prelude::ByteIdx;

// 注释类型，决定了图元高亮
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum AnnotationType {
    // 常规的搜索结果
    Match,
    // 选中的搜索结果，如果用户按下 enter，就会跳转到该结果
    SelectedMatch,
    // 数字
    Number,
    // 编程语言的保留字
    Keyword,
    // 编程语言的数据类型
    Type,
    // 编程语言的字面量和枚举变体
    KnownValue,
    Char,
    // 编程语言的生命周期
    LifetimeSpecifier,
    // 注释
    Comment,
    // 字符串字面量
    String,
}

// AnnotatedString的注解
#[derive(Clone, Copy, Debug)]
pub struct Annotation {
    pub annotation_type: AnnotationType,
    pub start: ByteIdx,
    pub end: ByteIdx,
}

impl Annotation {
    // 将字符串中的注释向右移动
    pub fn shift(&mut self, offset: ByteIdx) {
        self.start = self.start.saturating_add(offset);
        self.end = self.end.saturating_add(offset);
    }
}
